//
//  EmoticonPackages.swift
//  EmoticonKeyboard
//
//  Created by liii on 16/8/14.
//  Copyright © 2016年 liii. All rights reserved.
//

import UIKit

// 每页显示的表情的个数
let emojiCountPerPage = 21

class EmoticonPackages: NSObject {

    var name: String?
    
    // 每一种表情, 按21个一组的方式分割, 分割完的几组, 所组成的新数组
    var sectionEmoticon = [[Emoticon]]()
    
    // 记录按钮顺序
    var index = 0
    // 构造方法，用于字典转模型
    init(id: String, name: String, array: [[String : String]]) {
        super.init()
        
        self.name = name
        
        // 实现字典转模型
        var emoticons = [Emoticon]()
        for item in array {
            // 实例化一个表情对象
            let e = Emoticon(id: id, dict: item)
            // 添加到表情数组
            emoticons.append(e)
            index++
            
            // 每隔20个表情, 创建一个删除按钮, 并添加到表情数组中, 同时重置计数
            if index == 20 {
                let delete = Emoticon(isDelete: true)
                emoticons.append(delete)
                index = 0
            }
        }
        
        // 等待删除按钮添加完毕之后, 就对每一组分组表情, 取模, 实现不足21个的Cell, 添加空白按钮
        let delta = emoticons.count % emojiCountPerPage
        if delta == 0 {
            // 不需要添加空白按钮, 直接进行二次分组
            subEmoticonWithEmoticons(emoticons)
            return
        }
        
        // 需要添加空白按钮的, 实例化空表情按钮, 添加到数组中
        for _ in 0 ..< (20 - delta) {
            let empty = Emoticon(isEmpty: true)
            emoticons.append(empty)
        }
        
        // 最后再添加一个删除按钮
        let lastBtn = Emoticon(isDelete: true)
        emoticons.append(lastBtn)
        
        // 把大数组分割成，小数组用来分页显示
        subEmoticonWithEmoticons(emoticons)
    }
    
    // 将大的表情数组，分成以21个为一组的，多个表情组，用于在多页上显示
    private func subEmoticonWithEmoticons(array: [Emoticon]) {
    
        //1, 计算按照每页21个表情，需要分几页
        let count = array.count
        let pageCount = count / emojiCountPerPage + 1
//        print(array.count)
        
        //2, 按页截取
        for i in 0 ..< pageCount {
            let loc = i * emojiCountPerPage
            let lastIndex = loc + emojiCountPerPage
            
            // 最后一次截取, 如果不够21个, 按实际数量截取
            let len = lastIndex > count ? (count - loc) : emojiCountPerPage
//            var len = emojiCountPerPage
//            if lastIndex > count {
//                len = count - loc
//            }
            let range = NSRange(location: loc, length: len)
            let subEmoticon = (array as NSArray).subarrayWithRange(range) as! [Emoticon]
//            print(subEmoticon.count)
//            print("第\(i)次 = 截取了\(subEmoticon.count)个")
            // 添加到属性数组中
            sectionEmoticon.append(subEmoticon)
        }
    }
    
}
